home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 11 / FM Towns Free Software Collection 11.iso / t_os / game / cometf / cometf.bas next >
BASIC Source File  |  1995-07-25  |  7KB  |  314 lines

  1. 10 ' コメットコントロール
  2. 20 '
  3. 30 '1995.7.25
  4. 40 '
  5. 50 DEFINT A-Z
  6. 60 DEFDBL C,V
  7. 70 '
  8. 80 CLEAR ,,,,,500000
  9. 90 SCREEN 1,0:SCREEN@ 0:CLS:DEF PEN 0,7
  10. 100 SCREEN 1,1:SCREEN@ 0:CLS:DEF PEN 0,7:GOSUB *COL.SET
  11. 110 RANDOMIZE TIME
  12. 120 '
  13. 130 GOSUB *CONST.SET
  14. 140 GOSUB *DIM.DECLARE
  15. 150 GOSUB *VAR.SET
  16. 160 GOSUB *MOUSE.INIT
  17. 170 GOSUB *HAIKEI.PREP
  18. 180 SCREEN 1,0,3,0
  19. 190 DEF PEN 0,5
  20. 200 PROG_END=FALSE
  21. 210 WHILE PROG_END=FALSE
  22. 220   GOSUB *INIT.COMET
  23. 230   GOSUB *INIT.STAR
  24. 240   GOSUB *SELECT
  25. 250   IF PROG_END=FALSE THEN
  26. 260     GOSUB *PRE.GAME
  27. 270     GAME_END=FALSE
  28. 280     WHILE GAME_END=FALSE
  29. 290       GOSUB *VECTOR.COMET
  30. 300       GOSUB *MOVE.COMET
  31. 310       SKIP=FALSE
  32. 320       GOSUB *ERASE.STAR
  33. 330       IF SKIP=FALSE THEN GOSUB *DISP.TIME
  34. 340       IF SKIP=FALSE THEN GOSUB *BLINK.STAR
  35. 350       IF SKIP=FALSE THEN WAIT 3
  36. 360     WEND
  37. 370     GOSUB *POST.GAME
  38. 380   ENDIF
  39. 390 WEND
  40. 400 WAIT 50
  41. 410 END
  42. 420 '
  43. 430 '
  44. 440 *CONST.SET
  45. 450 TRUE=-1:FALSE=0
  46. 460 MSX1=215:MSY1=160:MSX2=424:MSY2=319
  47. 470 RETURN
  48. 480 '
  49. 490 *DIM.DECLARE
  50. 500 N=15:X=33:Y=25
  51. 510 DIM CX(N),CY(N)
  52. 520 DIM STAR(X,Y)
  53. 530 RETURN
  54. 540 '
  55. 550 *VAR.SET
  56. 560 FOR X=0 TO 33
  57. 570   FOR Y=0 TO 25
  58. 580     IF X<3  OR  30<X OR  Y<3 OR  22<Y THEN STAR(X,Y)=1
  59. 590     IF 10<X AND X<23 AND 7<Y AND Y<18 THEN STAR(X,Y)=1
  60. 600   NEXT
  61. 610 NEXT
  62. 620 RETURN
  63. 630 '
  64. 640 '
  65. 650 *SELECT
  66. 660 GOSUB *BEEP.SND
  67. 670 MOUSE 1,320,240,1
  68. 680 GOSUB *MSBT
  69. 690 IF BT=2 THEN PROG_END=TRUE
  70. 700 GOSUB *BEEP.SND
  71. 710 RETURN
  72. 720 '
  73. 730 '
  74. 740 *INIT.COMET
  75. 750 HP=15:SP=14:TP=1
  76. 760 FOR N=HP TO TP STEP -1
  77. 770   CX(N)=320:CY(N)=160
  78. 780 NEXT
  79. 790 GOSUB *COMET.PAL.SET
  80. 800 VX=-2:VY=0
  81. 810 PSET (CX(HP),CY(HP)),%HP
  82. 820 RETURN
  83. 830 '
  84. 840 *INIT.STAR
  85. 850 SCREEN 1,1
  86. 860 HS1=1:HS2=5:HS3=9:TIMER=0
  87. 870 STYPE=1:GOSUB *STAR.PAL.SET
  88. 880 STYPE=2:GOSUB *STAR.PAL.SET
  89. 890 STYPE=3:GOSUB *STAR.PAL.SET
  90. 900 DEF FONT "システム   12ドット"
  91. 910 SCNT=0
  92. 920 WHILE SCNT<70
  93. 930   X=INT(RND(1)*34):Y=INT(RND(1)*26)
  94. 940   IF STAR(X,Y)=FALSE THEN
  95. 950     STAR(X,Y)=TRUE:SCNT=SCNT+1
  96. 960     C=INT(RND(1)*12)+1
  97. 970     SYMBOL ((X-1)*20+4,(Y-1)*20+4),"★",.75!,.75!,%C
  98. 980   ENDIF
  99. 990 WEND
  100. 1000 SCREEN 1,0
  101. 1010 RETURN
  102. 1020 '
  103. 1030 '
  104. 1040 *PRE.GAME
  105. 1050 TIME$="00:00:00"
  106. 1060 TM=-1
  107. 1070 GOSUB *DISP.TIME
  108. 1080 RETURN
  109. 1090 '
  110. 1100 *POST.GAME
  111. 1110 GOSUB *BEEP.SND
  112. 1120 GOSUB *MSBT
  113. 1130 SCREEN 1,1
  114. 1140 GOSUB *HAIKEI.PREP
  115. 1150 SCREEN 1,0
  116. 1160 LINE (0,0)-(639,479),PSET,%0,BF,%0
  117. 1170 RETURN
  118. 1180 '
  119. 1190 '
  120. 1200 *VECTOR.COMET
  121. 1210 WT=2
  122. 1220 IF MOUSE(2,0)=TRUE THEN WT=4
  123. 1230 IF MOUSE(2,1)=TRUE THEN WT=1
  124. 1240 SX=MOUSE(0):SY=MOUSE(1)
  125. 1250 DX=SX-CX:DY=SY-CY
  126. 1260 R!=SQR(DX*DX+DY*DY)+30
  127. 1270 VDX=DX/(R!*R!*R!)*4000*WT:VDY=DY/(R!*R!*R!)*4000*WT
  128. 1280 VX=VX+VDX:VY=VY+VDY
  129. 1290 RETURN
  130. 1300 '
  131. 1310 *MOVE.COMET
  132. 1320 CCX=CX(HP):CCY=CY(HP)
  133. 1330 LX=CX(TP) :LY=CY(TP)
  134. 1340 CX=CCX+VX:CY=CCY+VY
  135. 1350 GOSUB *XBOUND
  136. 1360 GOSUB *YBOUND
  137. 1370 SP=HP
  138. 1380 HP=HP+1:IF HP=16 THEN HP=1
  139. 1390 TP=HP+1:IF TP=16 THEN TP=1
  140. 1400 CX(HP)=CX:CY(HP)=CY
  141. 1410 GOSUB *COMET.PAL.SET
  142. 1420 LINE (CX(TP),CY(TP))-(LX,LY),PSET,%0
  143. 1430 LINE (CX,CY)-(CCX,CCY),PSET,%HP
  144. 1440 RETURN
  145. 1450 '
  146. 1460 *BLINK.STAR
  147. 1470 TIMER=TIMER+1
  148. 1480 IF TIMER=8 THEN
  149. 1490   TIMER=0
  150. 1500   STYPE=STYPE+1:IF STYPE=4 THEN STYPE=1
  151. 1510   SCREEN 1,1
  152. 1520   GOSUB *STAR.PAL.SET
  153. 1530   SKIP=TRUE
  154. 1540   SCREEN 1,0
  155. 1550 ENDIF
  156. 1560 RETURN
  157. 1570 '
  158. 1580 *XBOUND
  159. 1590 BOUND=FALSE
  160. 1600 IF CX<2 OR 637<CX THEN
  161. 1610   IF CX<2 THEN BX=2 ELSE BX=637
  162. 1620   BY=CCY+(CY-CCY)*(BX-CCX)/(CX-CCX)
  163. 1630   IF 2<=BY AND BY<=477 THEN
  164. 1640     CX=BX:CY=BY:VX=-VX/3:VY=VY/3:BOUND=TRUE
  165. 1650   ENDIF
  166. 1660 ENDIF
  167. 1670 RETURN
  168. 1680 '
  169. 1690 *YBOUND
  170. 1700 IF BOUND=FALSE THEN
  171. 1710   IF CY<2 OR 477<CY THEN
  172. 1720     IF CY<2 THEN BY=2 ELSE BY=477
  173. 1730     BX=CCX+(CX-CCX)*(BY-CCY)/(CY-CCY)
  174. 1740     CX=BX:CY=BY:VX=VX/3:VY=-VY/3
  175. 1750   ENDIF
  176. 1760 ENDIF
  177. 1770 RETURN
  178. 1780 '
  179. 1790 *ERASE.STAR
  180. 1800 SSX=CX\20+1:SSY=CY\20+1
  181. 1810 SX=SSX:SY=SSY:GOSUB *ERASE.STAR.SUB
  182. 1820 IF SCNT<=15 THEN
  183. 1830   IF SKIP=FALSE THEN SX=SSX-1:SY=SSY  :GOSUB *ERASE.STAR.SUB
  184. 1840   IF SKIP=FALSE THEN SX=SSX  :SY=SSY-1:GOSUB *ERASE.STAR.SUB
  185. 1850   IF SKIP=FALSE THEN SX=SSX+1:SY=SSY  :GOSUB *ERASE.STAR.SUB
  186. 1860   IF SKIP=FALSE THEN SX=SSX  :SY=SSY+1:GOSUB *ERASE.STAR.SUB
  187. 1870 ENDIF
  188. 1880 RETURN
  189. 1890 '
  190. 1900 *ERASE.STAR.SUB
  191. 1910 IF STAR(SX,SY)=TRUE THEN
  192. 1920   SCREEN 1,1
  193. 1930   STAR(SX,SY)=FALSE
  194. 1940   LINE ((SX-1)*20,(SY-1)*20)-STEP(19,19),PSET,%14,BF,%14
  195. 1950   SCNT=SCNT-1:IF SCNT=0 THEN GAME_END=TRUE
  196. 1960   SKIP=TRUE
  197. 1970   SCREEN 1,0
  198. 1980 ENDIF
  199. 1990 RETURN
  200. 2000 '
  201. 2010 *DISP.TIME
  202. 2020 IF TIME>TM THEN
  203. 2030   SCREEN 1,1
  204. 2040   LINE (592,464)-STEP(639,479),PSET,%14,BF,%14
  205. 2050   TM=TIME
  206. 2060   T$=AKCNV$(RIGHT$("  "+STR$(TM),3))
  207. 2070   DEF FONT "システム   16ドット"
  208. 2080   SYMBOL (592,464),T$,1,1,%0
  209. 2090   SKIP=TRUE
  210. 2100   SCREEN 1,0
  211. 2110 ENDIF
  212. 2120 RETURN
  213. 2130 '
  214. 2140 '
  215. 2150 *COMET.PAL.SET
  216. 2160 G=&HF0:R=&HF0:B=&HF0
  217. 2170 FOR N=HP TO HP-14 STEP -1
  218. 2180   IF N<1 THEN NN=N+15 ELSE NN=N
  219. 2190   PALETTE NN,[G,R,B]
  220. 2200   G=G-&H10
  221. 2210   R=R-&H10
  222. 2220   B=B-&H10:IF B<&H40 THEN B=&H40
  223. 2230 NEXT
  224. 2240 RETURN
  225. 2250 '
  226. 2260 *STAR.PAL.SET
  227. 2270 ON STYPE GOSUB *SPS.1,*SPS.2,*SPS.3
  228. 2280 RETURN
  229. 2290 '
  230. 2300 *SPS.1
  231. 2310 HS1=HS1+1:IF HS1=5 THEN HS1=1
  232. 2320 P=HS1
  233. 2330 PALETTE P,[&H00,&HF0,&H00]
  234. 2340 P=P+1:IF P=5 THEN P=1
  235. 2350 PALETTE P,[&H00,&HB0,&H00]
  236. 2360 P=P+1:IF P=5 THEN P=1
  237. 2370 PALETTE P,[&H00,&H70,&H00]
  238. 2380 P=P+1:IF P=5 THEN P=1
  239. 2390 PALETTE P,[&H00,&HB0,&H00]
  240. 2400 RETURN
  241. 2410 '
  242. 2420 *SPS.2
  243. 2430 HS2=HS2+1:IF HS2=9 THEN HS2=5
  244. 2440 P=HS2
  245. 2450 PALETTE P,[&HF0,&HF0,&H00]
  246. 2460 P=P+1:IF P=9 THEN P=5
  247. 2470 PALETTE P,[&HB0,&HB0,&H00]
  248. 2480 P=P+1:IF P=9 THEN P=5
  249. 2490 PALETTE P,[&H70,&H70,&H00]
  250. 2500 P=P+1:IF P=9 THEN P=5
  251. 2510 PALETTE P,[&HB0,&HB0,&H00]
  252. 2520 RETURN
  253. 2530 '
  254. 2540 *SPS.3
  255. 2550 HS3=HS3+1:IF HS3=13 THEN HS3=9
  256. 2560 P=HS3
  257. 2570 PALETTE P,[&H90,&H90,&HF0]
  258. 2580 P=P+1:IF P=13 THEN P=9
  259. 2590 PALETTE P,[&H70,&H70,&HB0]
  260. 2600 P=P+1:IF P=13 THEN P=9
  261. 2610 PALETTE P,[&H50,&H50,&H70]
  262. 2620 P=P+1:IF P=13 THEN P=9
  263. 2630 PALETTE P,[&H70,&H70,&HB0]
  264. 2640 RETURN
  265. 2650 '
  266. 2660 '
  267. 2670 *HAIKEI.PREP
  268. 2680 LINE (0,0)-(639,479),PSET,%14,BF,%14
  269. 2690 LINE (MSX1-7,MSY1-7)-(MSX2+7,MSY2+7),PSET,%13,BF,%13
  270. 2700 DEF FONT "毛筆体     48ドット"
  271. 2710 SYMBOL (271,216),"彗星",3,3,%0
  272. 2720 RETURN
  273. 2730 '
  274. 2740 '
  275. 2750 *MOUSE.INIT
  276. 2760 DEF PEN 0,1
  277. 2770 MOUSE 0,1
  278. 2780 DIM PAND(64),PDOT(256)
  279. 2790 CIRCLE (10,10),7,%15
  280. 2800 GET@ (0,0)-(31,31),PAND,0
  281. 2810 GET@A (0,0)-(31,31),PDOT
  282. 2820 MOUSE 6,1,PAND,PDOT,10,10
  283. 2830 CLS
  284. 2840 MOUSE 4,MSX1,MSY1,MSX2,MSY2
  285. 2850 MOUSE 3,0,4
  286. 2860 MOUSE 3,1,4
  287. 2870 DEF PEN 0,5
  288. 2880 RETURN
  289. 2890 '
  290. 2900 '
  291. 2910 *MSBT
  292. 2920 CL=0
  293. 2930 WHILE CL=0
  294. 2940   IF MOUSE(2,0)=TRUE THEN CL=1
  295. 2950   IF MOUSE(2,1)=TRUE THEN CL=2
  296. 2960 WEND
  297. 2970 BT=CL
  298. 2980 WHILE CL>0
  299. 2990   IF MOUSE(2,0)=FALSE AND MOUSE(2,1)=FALSE THEN CL=0
  300. 3000 WEND
  301. 3010 RETURN
  302. 3020 '
  303. 3030 *BEEP.SND
  304. 3040 PLAY "V12@14O5C8"
  305. 3050 RETURN
  306. 3060 '
  307. 3070 '
  308. 3080 *COL.SET
  309. 3090 PALETTE  0,[&HF0,&HF0,&HF0]
  310. 3100 PALETTE 13,[&H00,&H00,&H40]
  311. 3110 PALETTE 14,[&H00,&H00,&H30]
  312. 3120 PALETTE 15,[&H00,&HF0,&H00]
  313. 3130 RETURN
  314.